package org.example.rabbitmq.listener;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;

import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 * @author Lenovo
 * @version 1.0
 * @description TODO
 * @date 28/7/2023 上午11:14
 */

public class AckListener implements ChannelAwareMessageListener {

    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        // 获取消息的标识
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try {
            // 获取消息
            System.out.println("new String (message.getBody()) = " + new String(message.getBody()));
            // 处理业务逻辑

            //报错
            int a = 1 / 0;
            // 如果没有异常，收到确认消息
            /*
                basicAck()
                    第一个参数:消息的标识
                    第二个参数:是否批量确认,如果为true,第一条确认后后面的消息自动确认
            */
            channel.basicAck(deliveryTag,true);
        } catch (Exception e) {
            e.printStackTrace();
            // 出现异常
            /*
                basicNack()
                    第一个参数:消息的标识
                    第二个参数:是否批量确认,如果为true,第一条确认后后面的消息自动确认
                    第三个参数:消息不确认时是否返回原消息队列
            */
            channel.basicNack(deliveryTag,true,true);
        }

    }
}
